package org.rujue.modules.sys.service;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.rujue.common.config.Global;
import org.rujue.common.utils.FileUtils;
import org.rujue.common.utils.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.rujue.common.persistence.Page;
import org.rujue.common.service.CrudService;
import org.rujue.modules.sys.entity.SysFile;
import org.rujue.modules.sys.dao.SysFileDao;

/**
 * 通用附件管理Service
 * @author Mr.xu
 * @version 2023-11-13
 */
@Service
@Transactional(readOnly = true)
public class SysFileService extends CrudService<SysFileDao, SysFile> {

	public SysFile get(String id) {
		return super.get(id);
	}
	
	public List<SysFile> findList(SysFile sysFile) {
		return super.findList(sysFile);
	}
	
	public Page<SysFile> findPage(Page<SysFile> page, SysFile sysFile) {
		return super.findPage(page, sysFile);
	}
	
	@Transactional(readOnly = false)
	public void save(SysFile sysFile) {
		super.save(sysFile);
	}

	@Transactional(readOnly = false)
	public void delete(SysFile sysFile) {
		super.delete(sysFile);
	}
	@Transactional(readOnly = false)
	public void delete(SysFile sysFile,boolean isDelFile) {
		super.delete(sysFile);
		if(isDelFile){
			FileUtils.deleteFile(Global.getConfig("upload-path") + sysFile.getFilePath());
		}
	}

	@Transactional(readOnly = false)
	public void save2Upload(SysFile sysFile){
		//	获取上传路径
		String relativePath = StringUtils.toCamelCase(sysFile.getHostTable()) + "/" + sysFile.getHostId();
		String uploadPath = Global.getConfig("upload-path") + relativePath;
		//	创建上传路径目录
		File file = new File(uploadPath);
		if(!file.exists()) {
			file.mkdir();
		}

		//	上传至服务器
		String originName = sysFile.getFile().getOriginalFilename();
		String newFileName = System.currentTimeMillis() +"."+ FileUtils.getFileExtension(originName);
		try {
			FileUtils.copyInputStreamToFile(sysFile.getFile().getInputStream(), new File(uploadPath, newFileName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		sysFile.setFileName(StringUtils.isBlank(sysFile.getFileName()) ? originName : sysFile.getFileName());
		sysFile.setFileDesc(StringUtils.isBlank(sysFile.getFileDesc()) ? originName : sysFile.getFileDesc());
		sysFile.setFilePath(relativePath + "/" + newFileName);
		sysFile.setFileExt(FileUtils.getFileExtension(newFileName));
		sysFile.setFileSize(FileUtils.formatSize(sysFile.getFile().getSize()));
		//  存储到附件表
		super.save(sysFile);

	}
	/**
	 * 根据hostId获取附件
	 * @param hostId 宿主id
	 * @return
	 */
	public SysFile getByHostId(String hostId) {
		SysFile sysFile = new SysFile();
		sysFile.setHostId(hostId);
		List<SysFile> list = findList(sysFile);
		if(list.size() > 0){
			return list.get(0);
		}
		return null;
	}
	/**
	 * 根据hostId删除附件
	 * @param hostId 宿主id
	 */
	public void deleteByHostId(String hostId) {
		deleteByHostId(hostId, true);
	}
	/**
	 * 根据hostId删除附件
	 * @param hostId 宿主id
	 * @param isDelFile 是否删除文件
	 */
	public void deleteByHostId(String hostId, boolean isDelFile) {
		SysFile sysFile = getByHostId(hostId);
		if(sysFile == null){
			return;
		}
		sysFile.preUpdate();
		dao.deleteByHostId(sysFile);
		if(isDelFile){
			FileUtils.deleteFile(Global.getConfig("upload-path") + sysFile.getFilePath());
		}
	}
}